package com.boot.dao;

import com.boot.entity.User;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

/**
 * Created by Wuxiang on 2017/7/21.
 * @CacheConfig： 主要用于配置该类中会用到的一些共用的缓存配置。
 * @Cacheable： 配置了findByName函数的返回值将被加入缓存。
 */
@CacheConfig(cacheNames = "users")
public interface UserRepository extends JpaRepository<User, Long> {

    @Cacheable
    User findByName(String name);

    User findByNameAndAge(String name, Integer age);

    // 使用博客原来的报错：
    // org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerAdapter'
    // 因此还是使用sql方言
    //    @Query("from User u where u.name=:name")
    @Query(value = "select * from user_boot where name = ?1", nativeQuery = true)
    User findUser(@Param("name") String name);

}
